package d5_homework;

import java.io.File;
import java.util.Scanner;

public class SecondQuestion {
    public static void main(String[] args) {
        //目标: 完成按照指定格式打印文件夹的目录结构(包含子文件夹和文件)
        //1、创建一个扫描器
        Scanner sc = new Scanner(System.in);
        //提示用户输出文件夹路径
        String dir = sc.next();
        //最后一步进行方法调用
        printDirectoryStructure(new File(dir), 0);
    }

    //独立功能独立成方法
    public static void printDirectoryStructure(File dir, int num) {
        //1、做极端判断
        //如果文件夹是null就会就无法调用方法,否则包nullPointerException
        //文件不存在也不行
        if (dir == null || !dir.exists()) {
            return;//直接干掉方法
        }
        //利用num记录时几级文件夹
        num++;//------------>利用这个记录是多少级的文件夹

        //如果dir是一个文件的时候直接打印
        if (dir.isFile()){
            System.out.println("|-" + dir.getName());
        }

        //2、获取所有的一级子文件
        File[] files = dir.listFiles();
        //3、再做极端判断
        //无权访问该文件夹的内容
        if (files == null) {
            System.out.println("您无权访问该文件夹的内容");
            return; //直接干掉方法
        }

        //4、判斷是否是空文件夹 -->如果是就直接进行打印
        if (files.length == 0) {
            System.out.println("|-" + dir.getName());
        }
        //上面卫语句层层拦截-->到这里证明可以进行访问
        //5、遍历该文件夹下的所有一级文件对象
        for (File file : files) {
            //6、做判断,是文件还是文件夹
            if (file.isFile()) {
                for (int i = 0; i < num; i++) {
                    //是文件夹,直接打印
                    System.out.print("\t");
                }
                System.out.println("|-" + file.getName());
            } else {
                //要向进行打印文件夹的名称
                for (int i = 0; i < num; i++) {
                    //是文件夹,直接打印
                    System.out.print("\t");
                }
                System.out.println("|-" + file.getName());
                //是文件夹进行递归
                printDirectoryStructure(file, num);
            }
        }

    }
}
